(define (kons x y)
  (lambda (selector)
    (selector x y)))
(define (kar c)
  (c (lambda (x y) x)))
(define (kdr c)
  (c (lambda (x y) y)))

(define (print x) (builtin print x))
(define (null? x) (builtin null? x))

(define (print-each list)
  (if (null? list)
      #t
     (begin (print (kar list))
            (print-each (kdr list)))))

(define (map f l)
  (if (null? l)
      '()
      (kons (f (kar l))
	    (map f (kdr l)))))

(define (stuff)
  (kons (kons 'h 'w)
	(kons (kons 'e 'o)
	      (kons (kons 'l 'r)
		    (kons (kons 'l 'l)
			  (kons (kons 'o 'd)
			       '()))))))

(define scm-main
  (begin (print-each (map kar (stuff)))
	 (print-each (map kdr (stuff)))))

